/**
 * 小说自动阅读器插件
 * 配置项：
 * 1.playBtn -> 播放与暂停
 * 2.sTopBtn -> 回到顶部按钮
 * 3.playImg -> 播放图标
 * 4.pauseImg -> 暂停图标
 */
//窗口加载完运行 -> 实例化
;
(function () {
  //this -> window
  //获取可视窗口的高度
  var wHeight = getViewportSize().height,
    //获取整个文档的高度
    sHeight = getScrollSize().height,
    //定义是否播放
    playing = false,
    t = null;

  var AutoReader = function (opt) {
    //this -> AutoReader实例化的对象
    var _self = this;

    //属性
    this.playBtn = opt.playBtn;
    this.sTopBtn = opt.sTopBtn;
    this.playImg = opt.playImg;
    this.pauseImg = opt.pauseImg;

    //检测配置项是否都有
    if (!this.playBtn || !this.sTopBtn || !this.playImg || !this.pauseImg) {
      alert('对不起，4个配置项必须配置');
      return;
    }

    //功能1事件绑定：点击事件
    addEvent(this.sTopBtn, 'click', function () {
      //还原图标为播放/清除计时器/设置播放状态为false
      _self.changeToPlay();

      //功能1：回到顶端
      window.scrollTo(0, 0);
    })
    //功能1事件绑定：滚动事件
    addEvent(window, 'scroll', function () {
      _self.sTopBtnShow();
    })
    //功能2事件绑定：点击事件
    addEvent(this.playBtn, 'click', function () {
      _self.setAutoPlay();
    })
  }
  //原型方法
  AutoReader.prototype = {
    //是否显示播放按钮
    sTopBtnShow: function () {
      //获取滚动距离
      var sTop = getScrollOffset().top;

      //滚动距离是否存在
      this.sTopBtn.style.display = sTop ? 'block' : 'none';
    },
    //自动滚动
    setAutoPlay: function () {
      //获取滚动距离
      var sTop = getScrollOffset().top,
        _self = this;

      //为真证明滚动条走到底
      //功能：在最底下点击播放按钮是不需要的
      //文档高度 = 窗口高度 + 滚动距离 
      if (sHeight === wHeight + sTop) {
        return;
      }

      //功能2：自动播放阅读
      //什么情况下需要播放？
      //如果并没有滚动，点击了会开始滚动，计时器启动，且playing状态为真
      if (!playing) {
        t = setInterval(function () {
          //每时每刻都要监听滚动条距离
          var sTop = getScrollOffset().top;
          //如果滚动到底部了，清除计时器
          if (sHeight <= wHeight + sTop) {
            //还原图标为播放/清除计时器/设置播放状态为false
            _self.changeToPlay();
          } else {
            //如果没有滚动到底部了,触发窗口事件累计滚动
            window.scrollBy(0, 1);
            //设置按钮图标为停止图标
            _self.playBtn.style.backgroundImage = 'url(' + _self.pauseImg + ')';
          }
        }, 50);
        playing = true;
      } else {
        //如果正在播放
        //还原图标为播放/清除计时器/设置播放状态为false
        _self.changeToPlay();
      }
    },
    //抽象：还原为播放按钮
    //还原图标为播放/清除计时器/设置播放状态为false
    changeToPlay: function () {
      clearInterval(t);
      this.playBtn.style.backgroundImage = 'url(' + this.playImg + ')';
      playing = false;
    }
  }
  window.AutoReader = AutoReader;
})()